/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * FormPessoaBusca.java
 *
 * Created on 26/03/2011, 11:27:39
 */

package Interface;

import classes.Popup;
import Controle.ControlaPessoa;
import Modelo.ConexaoBD;
import Modelo.Pessoa;
import classes.Validacao;
import java.awt.event.KeyEvent;
import java.sql.*;

/**
 * Form para busca de pessoas
 * @author Jonas Gualberto Diel [jonasdiel@gmail.com]
 */
public class FormPessoaBusca extends javax.swing.JInternalFrame {

    public static Connection con;
    public static Statement stmt;

    /** Creates new form FormPessoaBusca */
    public FormPessoaBusca() {
        abreConexao();        
        initComponents();
        autalizarTabela();
    }

    //Abre uma conexão com o banco de dados
    private void abreConexao() {
        try {
            con = ConexaoBD.getInstance().getConnection();
            stmt = con.createStatement();
        } catch (Exception e) {
            System.out.print(e);
        }
    }

    //Carrega os registros da base de dados diretamente na tabela quando chamado
    public void autalizarTabela()
    {
        ControlaPessoa controla = new ControlaPessoa(null, tablePessoas);
        controla.popularTabela(null);
    }

    //Carrega os registros da base de dados diretamente na tabela quando chamado
    public void autalizarTabela(Pessoa filtro)
    {
        ControlaPessoa controla = new ControlaPessoa(null, tablePessoas);
        controla.popularTabela(filtro);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnNovo = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablePessoas = new javax.swing.JTable();
        btnFiltrar = new javax.swing.JButton();
        codigo = new javax.swing.JTextField();
        nome = new javax.swing.JTextField();
        labelCodigo = new javax.swing.JLabel();
        labelNome = new javax.swing.JLabel();
        btnLimpar = new javax.swing.JButton();
        validaCodigo = new javax.swing.JLabel();
        btnEditar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setTitle("Buscar Pessoa");
        setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/menu/user.png"))); // NOI18N
        setMinimumSize(new java.awt.Dimension(160, 50));

        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/application_add.png"))); // NOI18N
        btnNovo.setText("Novo");
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });

        tablePessoas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null},
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String [] {
                "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(tablePessoas);

        btnFiltrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/application_form_magnify.png"))); // NOI18N
        btnFiltrar.setText("Filtrar");
        btnFiltrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnFiltrarActionPerformed(evt);
            }
        });

        codigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                codigoKeyPressed(evt);
            }
        });

        nome.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                nomeKeyPressed(evt);
            }
        });

        labelCodigo.setText("Código:");

        labelNome.setText("Nome:");

        btnLimpar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/application_lightning.png"))); // NOI18N
        btnLimpar.setText("Limpar");
        btnLimpar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimparActionPerformed(evt);
            }
        });

        validaCodigo.setForeground(new java.awt.Color(255, 0, 0));

        btnEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/application_edit.png"))); // NOI18N
        btnEditar.setText("Editar");
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/imagens/application_delete.png"))); // NOI18N
        btnExcluir.setText("Excluir");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 677, Short.MAX_VALUE)
                            .addComponent(btnNovo)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(labelCodigo)
                                    .addComponent(labelNome))
                                .addGap(55, 55, 55)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 267, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(10, 10, 10)
                                        .addComponent(validaCodigo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnFiltrar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnLimpar)
                        .addGap(275, 275, 275))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnEditar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnExcluir)
                        .addContainerGap(513, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnNovo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelCodigo)
                    .addComponent(validaCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelNome))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(btnFiltrar)
                    .addComponent(btnLimpar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 53, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEditar)
                    .addComponent(btnExcluir))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(27, 27, 27))
        );

        getAccessibleContext().setAccessibleName("Buscar Questionário");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed

        //Se o form ja está aberto transfere o foco, se nao exibe
        if(FormPrincipal.formPessoa.isVisible())
        {
            Popup popup = Popup.obterInstancia();
            popup.exibirMensagem("Feche a janela '"+FormPrincipal.formPessoa.getTitle()+"' ativa");
        }
        else
        {
            //Inicializa formulário e prepara para inserir registro
            FormPrincipal.formPessoa.setFunction(Form.FUNCTION_INSERT); //Define a função de inserção
            FormPrincipal.formPessoa.limparCampos(); //Limpa o formulário para inserir novo registro
            FormPrincipal.formPessoa.setTitle("Inserir Pessoa"); //Define o título
            FormPrincipal.formPessoa.setVisible(true); //Abre a janela
        }
    }//GEN-LAST:event_btnNovoActionPerformed

    private void btnLimparActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimparActionPerformed

        validaCodigo.setText(null);
        //Limpa os filtros
        this.codigo.setText(null);
        this.nome.setText(null);

        //Atualiza a tabela
        autalizarTabela();
    }//GEN-LAST:event_btnLimparActionPerformed

    private void btnFiltrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFiltrarActionPerformed

        validaCodigo.setText(null);
        if( Validacao.validarInteiro(codigo.getText(), false) )
        {
            Pessoa filtro = new Pessoa();
            if( codigo.getText().length() > 0 )
            {
                filtro.setPersonId(Integer.parseInt(codigo.getText()));
            }
            filtro.setName(nome.getText());
            autalizarTabela(filtro);
        }
        else
        {
            validaCodigo.setText("Código inválido");
        }
        
    }//GEN-LAST:event_btnFiltrarActionPerformed

    //Ação de editar um registro
    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed

        Popup mensagem = Popup.obterInstancia();

        //Se o form ja está aberto transfere o foco, se nao exibe
        if(FormPrincipal.formPessoa.isVisible())
        {
            Popup popup = Popup.obterInstancia();
            popup.exibirMensagem("Feche a janela '"+FormPrincipal.formPessoa.getTitle()+"' ativa");
        }
        else
        {
            //Verifica se existe apenas 1 item selecionado
            if( tablePessoas.getSelectedRowCount() > 0 )
            {
                if( tablePessoas.getSelectedRowCount() > 1 )
                {
                    //Sselecionar apenas 1 registro
                    mensagem.exibirMensagem("Selecione apenas um registro!");
                }
                else
                {
                    //Instancia e popula o formulário para edição
                    FormPrincipal.formPessoa.setFunction(Form.FUNCTION_UPDATE); //Define a função de edição
                    FormPrincipal.formPessoa.popularCampos(Integer.parseInt(String.valueOf(tablePessoas.getValueAt(tablePessoas.getSelectedRow(), 0)))); //Popula os campos
                    FormPrincipal.formPessoa.setTitle("Editar Pessoa"); //Define o título
                    FormPrincipal.formPessoa.setVisible(true); //Abre a janela
                }
            }
            else
            {
                //Nenhum item selecionado
                mensagem.exibirMensagem("Nenhuma registro selecionado!");
            }
        }
    }//GEN-LAST:event_btnEditarActionPerformed

    //Ação de excluir registros
    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed

        Popup mensagem = Popup.obterInstancia();

        //Verificar item selecionado na grid
        if( tablePessoas.getSelectedRowCount() > 0 )
        {
            if ( mensagem.pedirConfirmacao("Tem certeza que deseja excluir o(s) registro selecionado?") )
            {
                //percorre e exclui os registros selecionados
                int selecionados[] = tablePessoas.getSelectedRows();
                for (int i=0; i<selecionados.length; i++)
                {                    
                    Pessoa pessoa = new Pessoa();
                    pessoa.setPersonId(Integer.parseInt(String.valueOf( tablePessoas.getValueAt(selecionados[i], 0))));
                    ControlaPessoa ctlPessoa = new ControlaPessoa(pessoa, null);
                    ctlPessoa.excluirPessoa();
                    FormPrincipal.formPessoaBusca.autalizarTabela(); //Atualizar a tabela do  formmulário de busca
                }
            }
        }
        else
        {
            //Nenhum item selecionado
            mensagem.exibirMensagem("Nenhuma registro selecionado!");
        }

    }//GEN-LAST:event_btnExcluirActionPerformed

    private void codigoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_codigoKeyPressed
       String tecla = KeyEvent.getKeyText(evt.getKeyCode());
       if ( tecla.equalsIgnoreCase("Enter") )
       {
           this.btnFiltrarActionPerformed(null);
       }
    }//GEN-LAST:event_codigoKeyPressed

    private void nomeKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_nomeKeyPressed
       String tecla = KeyEvent.getKeyText(evt.getKeyCode());
       if ( tecla.equalsIgnoreCase("Enter") )
       {
           this.btnFiltrarActionPerformed(null);
       }
    }//GEN-LAST:event_nomeKeyPressed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnFiltrar;
    private javax.swing.JButton btnLimpar;
    private javax.swing.JButton btnNovo;
    private javax.swing.JTextField codigo;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel labelCodigo;
    private javax.swing.JLabel labelNome;
    private javax.swing.JTextField nome;
    private javax.swing.JTable tablePessoas;
    private javax.swing.JLabel validaCodigo;
    // End of variables declaration//GEN-END:variables

}
